package main
import "fmt"


// 定义一个用户的结构体
type User struct {
	Name string
	Age int
	Sex string
	// 一个结构体可以有多个字段
	// 一个结构体可以有多个方法
	
}


func main() {

	//test2()
	//test3()
	test4()
}

// 第三种方式创建一个结构体
func test4(){
	var t *User = &User{}
	t.Name = "张三"
	t.Age = 18
	t.Sex = "男"
	fmt.Println(*t)
}

// 第三种方式创建一个结构体
func test3(){
	var t *User = new(User)
	// t 是指针，t其实指向的就是地址 ，应该给这个地址指向的对象的字段赋值
	t.Name = "张三"
	t.Age = 18
	t.Sex = "男"
	fmt.Println(*t)

	// 底层写法
	(*t).Name = "李四"
	(*t).Age = 19
	(*t).Sex = "女"
	fmt.Println(*t)
}

// 第二种方式创建一个结构体
func test2(){
	var user = User{
		Name: "张三",
		Age: 18,
		Sex: "男",
	}
	fmt.Println(user)

	var user2 = User{
		"张三1",
		18,
		"男",
	}	
	fmt.Println(user2)
}

// 第一种方式创建一个结构体
func test1(){
	var user User
	fmt.Println(user)
	user.Name = "张三"
	user.Age = 18
	user.Sex = "男"
	fmt.Println(user)
}